package service

import (
	"automation/util"
	"fmt"
	"log"
	"math/rand"
	"time"

	"github.com/tebeka/selenium"
)

// 跳转
func redirect(driver selenium.WebDriver, name string, defaultPage ...string) {
	//默认页面
	page := util.Viper.GetString("reliste.url")
	if len(defaultPage) > 0 && defaultPage[0] != "" {
		page = defaultPage[0]
	}

	//获取当前窗口句柄
	windowHandles, err := driver.WindowHandles()
	if err != nil {
		fmt.Println("获取窗口句柄失败:", err)
		return
	}

	if len(windowHandles) > 1 { //多标签窗口
		//切换到新窗口
		err = driver.SwitchWindow(windowHandles[1])
		if err != nil {
			fmt.Println("切换窗口失败:", err)
			return
		}

		//关闭当前窗口
		err = driver.CloseWindow(windowHandles[1])
		if err != nil {
			fmt.Println("关闭窗口失败:", err)
			return
		}

		//切换回原窗口
		err = driver.SwitchWindow(windowHandles[0])
		if err != nil {
			fmt.Println("切换窗口失败:", err)
			return
		}
	} else { //在同一标签窗口
		//当前句柄
		current, err := driver.CurrentWindowHandle()
		if err != nil {
			fmt.Println("获取当前窗口句柄失败:", err)
			return
		}

		//是否是原窗口
		if current == name {
			err = driver.Get(page)
			if err != nil {
				fmt.Println("获取页面失败:", err)
				return
			}

		} else {
			// 切换回原窗口
			err = driver.SwitchWindow(name)
			if err != nil {
				fmt.Println("切换窗口失败:", err)
				return
			}
		}
	}
}

// 每隔一段时间就刷新页面
func refreshPage(driver selenium.WebDriver) {
	fmt.Println("页面即将刷新...")

	//超过指定次数刷新页面还是错误就终止程序
	var count uint = 0
	maxNum := util.Viper.GetUint("system.retry_max_count")
	if maxNum == 0 {
		maxNum = 10
	}

	interval := util.Viper.GetInt("system.retry_interval")
	if interval <= 0 {
		interval = 10
	}

	//随机等待一段时间
	time.Sleep(time.Duration(rand.Intn(interval)) * time.Second)

	for {
		//刷新页面
		err := driver.Refresh()
		if err != nil {
			count++
			//超过指定次数刷新页面还是错误就终止程序
			if count > maxNum {
				log.Fatal("刷新页面失败次数过多，终止程序")
			}

			continue
		}
		break
	}

}
